了解 Move.toml 和 Move.lock 文件

现在您已经知道如何使用 Move on Sui 创建 Move 包了。在本课中,我们将详细探讨 Move 包的重要组件。我们将探讨 Move.tomlMove.lock 文件的工作原理以及它们的用例。

Move.toml 文件

当您使用 sui move new 命令创建 Move 包时,它会使用它创建一个 Move.toml 文件。默认情况下,它包含一些内容,但随着时间的推移,随着你的成长,你会发现你需要更改文件中的内容并根据你的需要进行修改。因此,最终,我们需要详细了解该文件,以便将来轻松使用它。

您可能已经注意到 Move.toml 文件具有三个主要组成部分。让我们来探索一下它们。

  1. [package][package] 部分包含 Move 包的名称和版本。它代表您的包的元数据。
  2. [dependencies][dependencies] 代表我们的 Move 包所依赖的所有包。默认情况下,此处提到的唯一包是 Sui 框架,但随着您的进步,您可以在此处添加更多包。
  3. [addresses] :这代表命名地址列表。该字段帮助我们为要在智能合约代码中使用的地址提供别名。

现在,让我们通过示例详细讨论这些组件。

[package] 部分

[package] 部分具有以下三个重要字段。

  1. namename 字段帮助识别您在运行 sui move new 时创建的 Move 包名称,例如 sui move new hello_world
  2. versionversion 有助于识别软件包的版本。默认情况下,Sui 编译器在创建包时为您的包提供第一个版本,例如 0.0.1
  3. published-at :默认情况下,Move 编译器不会创建此字段。此字段有助于识别我们包裹的地址。例如,Sui 框架发布在 0x2 地址,因此其发布位置将为 "0x2" 。我们在发布包后包含此字段,并帮助其他包使用 published-at 地址访问我们的包。

现在,让我们看看默认情况下 [package] 部分在 Move.toml 文件中的样子。

#![allow(unused)]
fn main() {
[package]
name = "hello_world"
version = "0.0.1"
}

添加 published-at 字段后 [package] 部分如下所示。请记住,这只是一个示例,地址可能会有所不同。

#![allow(unused)]
fn main() {
[package]
name = "hello_world"
version = "0.0.1"
published-at = "0x0"
}

[dependencies] 部分

默认情况下,Sui 编译器会在 [dependencies] 部分添加一个包。它使用 GitHub 链接添加了 Sui 框架。默认情况下是这样的:

#![allow(unused)]
fn main() {
[dependencies]
Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" }
}

您还可以从本地路径导入任何包。为此,您可以像这样添加包。

#![allow(unused)]
fn main() {
Sui = { local = "../crates/sui-framework" }
}

[addresses] 部分

默认情况下,Sui 编译器在 [addresses] 部分添加两个地址:一个是包的地址,另一个是 Sui 网络的地址。它看起来是这样的。

#![allow(unused)]
fn main() {
[addresses]
hello_world = "0x0"
sui =  "0x2"
}

在这里,别名,例如 sui ,可以帮助我们轻松地从智能合约中的 sui 导入包,如下所示:

#![allow(unused)]
fn main() {
use sui::transfer
}

如果没有别名,我们就需要编写地址,这可能会给我们带来混乱。

Move.lock 文件

当您使用 sui move build 命令构建 Move 包时,它会在包的根目录中创建 Move.lock 文件。 Move.lock 文件包含有关您的包及其需要导入的依赖项的信息。这有助于验证您的源代码及其正在导入的代码。由于 Move.toml 文件是可编辑的,因此 Move.lock 文件不可编辑。 Move.lock 帮助编译器识别运行 Move 包所需的基本内容,这就是为什么我们无法更改或将 Move.lock 文件移动到任何其他位置。这是我们的 hello_world 模块的 Move.lock 的样子。

#![allow(unused)]
fn main() {
@generated by Move, please check in and do not edit manually.

[move]
version = 0
manifest_digest = "1EA2B7F6C986E247256A7F281C4A866CE325DE9724C9D8BCBE2B0BA4CB7E18C5"
deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082"

dependencies = [
  { name = "Sui" },
]

[[move.package]]
name = "MoveStdlib"
source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/move-stdlib" }

[[move.package]]
name = "Sui"
source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/sui-framework" }

dependencies = [
  { name = "MoveStdlib" },
]
}

总结

Move.tomlMove.lock 文件在 Move 包中起着至关重要的作用,这就是为什么了解它们的工作原理以及我们甚至需要它们的原因。接下来,我们将探讨在 Move on Sui 中智能合约是如何声明的。我们将探讨 moduleuse 关键字在 Move on Sui 中的用法。

quiz

Move.lock 文件是如何生成的以及它在 Move 包中的用途是什么?